/************************************************************************/
/**author: 阮班勇                                             */
/**description : 本函数从串口读取公交位置信息然后发送到类存                                  */
/**time: Thu Apr 23 22:50:48 2009                                                    */

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include "serial.h"
//getmsg从串口读入数据，应该是阻塞读写
#define SERIAL_SPEED   115200
bool getmsg (int fd,int *buf);
void init_open_serial(int *fd,char *dev);
int main(int argc, char **argv)
{
     int fd_memfifo;
     int fd_ttys0; //串口
     int ret;
     int msg;
     char *devtty="/dev/ttyS0";
     
     //打开共享内存
     fd_memfifo=open("/dev/memfifo",O_RDWR);
     if(fd_memfifo == -1)
     {
	  printf("open /dev/memfifo failed \n");
	  return ;
     }
     //打开并初始化串口
    
     
     if(!init_open_serial(&fd_ttys0,devtty))
     {
	  printf("open /dev/ttyso failed\n");
	  close(fd_memfifo);
	  return -1;
	  
     }
     
     
     //获取数据当然这里应该是个死循环的
     whiel(1)
     {
	  //如果有数据就写入
	  if(getmsg(fd_ttys0,&msg))
	  {
	       ret = write(fd_memfifo,(void*)&msg,sizeof(int));
	       if( ret != 4)
	       {
		    printf("write failed \n");
	       
	       }
	  
	  }
    
     }
     
     return 0;
}


bool getmsg (int fd,int *buf)
{
     //每次只读取一个字节的数据，这个也是内存中定义了的
     int ret;
     ret = read(fd,(void*)buf,sizeof(int));
     if(ret != 4)
     {
	  return false;
	  
     }
     
     else
	  return true;
     
}

void init_open_serial(int *fd,char *dev)
{
     *fd = init_serial(dev);
     if(fd > 0)
	  set_speed(fd,SERIAL_SPEED);
     else
     {
	  printf("Can't Open Serial Port!%s",dev);
	  return false;
	  
	  
     }
     if(set_parity(fd,8,1,'N') == 0)
     {
	  printf("Set Parity Error\n");
	  return false;
	  
	  
     }
     printf("successfully set %s",dev);
     return true;
     
     
     
}
